/**
 * Created by IntelliJ IDEA.
 * User: ReZzZ
 * Date: 07 Apr 11
 * Time: 12:09:39
 * To change this template use File | Settings | File Templates.
 */
public class MainUI {
    private ProjModel pm = new ProjModel();
     private GridView gv = new GridView();


    public void showMenu() {
        /*
        === MENU ===
        1. Set Number of horizontal lanes (H-street) [min 1, max 3]
        2. Set Number of vertical lanes  (V-street) [min 1, max 4]
        3. Set Probability of a car entering H-street [min 0, max 1]
        3. Set Probability of a car entering V-street [min 0, max 1]
        5. Run one simulation cycle
        6. Set and run number of simulation cycles [min 1, max 10]
        Enter your choice>           */
        int x = 1;

        while (x > 0) {
        System.out.print( " === MENU ===\n" +
                " 1. Set Number of horizontal lanes (H-street) [min 1, max 3]\n" +
                " 2. Set Number of vertical lanes  (V-street) [min 1, max 4]\n" +
                " 3. Set Probability of a car entering H-street [min 0, max 1]\n" +
                " 4. Set Probability of a car entering V-street [min 0, max 1]\n" +
                " 5. Run one simulation cycle\n" +
                " 6. Set and run number of simulation cycles [min 1, max 10]\n" +
                " ");
        String userChoice = GetUserInput.getUserChoice("Enter your choice>");
        int userChoiceInt = Integer.parseInt(userChoice);
        //System.out.println("After int conversion" + userChoiceInt);

        switch(userChoiceInt) {
            case 1 : System.out.println("Menu 1");
                     setNumHorLanes();
                break;
            case 2 : System.out.println("Menu 2");
                     setNumVerLanes();
                break;
            case 3 : System.out.println("Menu 3");
                     setHorCProb();
                break;
            case 4 : System.out.println("Menu 4");
                     setVerCProb();
                gv.initGrid(pm);
                break;
            case 5 : System.out.println("Menu 5");
                    runOne();
                break;
            case 6 : System.out.println("Menu 6");
                    simulationCycles() ;
                break;
            default : System.out.println("Error in entering menu choice");
                break;
        }

      }
    }

    public void setNumHorLanes () {
        String userChoice = GetUserInput.getUserChoice("Enter number of horizontal lanes : ");
        int userChoiceInt = Integer.parseInt(userChoice);
        int lowerLimit = 1;
        int upperLimit = 3;
        if (userChoiceInt > upperLimit || userChoiceInt < lowerLimit) {
           System.out.println("Error in entering horizontal lanes");
           System.out.println("Please enter number above 1 and below 3. ");
           showMenu();
        } else { //if user enter the correct input
            pm.setHorLanes(userChoiceInt);
            //let user set the number
        }

    }

    public void setNumVerLanes () {
        String userChoice = GetUserInput.getUserChoice("Enter number of vertical lanes : ");
        int userChoiceInt = Integer.parseInt(userChoice);
        int lowerLimit = 1;
        int upperLimit = 4;
        if (userChoiceInt > upperLimit || userChoiceInt < lowerLimit) {
           System.out.println("Error in entering vertical lanes");
           System.out.println("Please enter number above 1 and below 4. ");
           showMenu();
        } else { //if user enter the correct input
            pm.setVerLanes(userChoiceInt);
            //let user set the number
        }

    }

    public void setHorCProb() {
        String userChoice = GetUserInput.getUserChoice("Enter probability car on Horizontal Lanes[0-1]:");
        double inputDouble = Double.parseDouble(userChoice);

        if (inputDouble > 1 || inputDouble < 0) {
            System.out.println("Error! Please enter number from 0 - 1");
            showMenu();
        } else {
            pm.setHorCarProb(inputDouble);
            System.out.println("Probability of horizontal car is " + pm.getHorCarProb());

        }
    }

    public void setVerCProb() {
        String userChoice = GetUserInput.getUserChoice("Enter probability car on Vertical Lanes[0-1]:");
        double inputDouble = Double.parseDouble(userChoice);

        if (inputDouble > 1 || inputDouble < 0) {
            System.out.println("Error! Please enter number from 0 - 1");
            showMenu();
        } else {
            pm.setVerCarProb(inputDouble);
            System.out.println("Probability of vertical car is " + pm.getVerCarProb());
        }
    }

    public void runOne(){
        gv.runCycle(pm, 1);
    }
     public void simulationCycles() {

        String userChoice = GetUserInput.getUserChoice("Enter number of simulation cycle [1-10]:");
        int inputInt = Integer.parseInt(userChoice);

        if (inputInt > 10 || inputInt < 1) {
            System.out.println("Error! Input number from 1 - 10");
            showMenu();
        } else {
             gv.runCycle(pm, inputInt);
        }
    }

    public int showHorLanes() {
        return pm.getHorLanes();
    }

    public int showVerLanes() {
        return pm.getVerLanes();
    }
}
